package StructuralPattern.Proxy.StaticForceProxy;

/**
 * @Classname : ProxyClient
 * @Description : 测试 代理设计模式（静态 强制 代理）
 * 静态强制代理：创建具体角色，通过具体角色获取代理角色，再使用代理角色执行操作。
 * 使用建议：当具体角色存在多个不同代理角色时建议使用强制代理，具体角色可作为统一入口获取代理角色
 *
 * @Author : chentianyu
 * @Date 2023/2/11 22:59
 */


public class ProxyClient {
    public static void main(String[] args) {
        System.out.println("具体角色执行操作");
        GamePlayer zhangsan = new ConcreteGamePlayer("zhangsan");
        zhangsan.login();
        zhangsan.killBoss();
        zhangsan.upgrade();
        System.out.println("--------------------------------------------------------------------");

        System.out.println("直接创建代理角色执行操作");
        GamePlayer proxy = new GamePlayerProxy(zhangsan);
        zhangsan.login();
        zhangsan.killBoss();
        zhangsan.upgrade();
        System.out.println("--------------------------------------------------------------------");

        System.out.println("通过具体角色获取代理角色，再使用代理角色执行操作");
        GamePlayer proxy2 = zhangsan.getProxy();
        proxy2.login();
        proxy2.killBoss();
        proxy2.upgrade();
        System.out.println("--------------------------------------------------------------------");
    }
}

/** 20230211
 * 具体角色执行操作
 * 请使用指定的代理角色访问
 * 请使用指定的代理角色访问
 * 请使用指定的代理角色访问
 * --------------------------------------------------------------------
 * 直接创建代理角色执行操作
 * 请使用指定的代理角色访问
 * 请使用指定的代理角色访问
 * 请使用指定的代理角色访问
 * --------------------------------------------------------------------
 * 通过具体角色获取代理角色，再使用代理角色执行操作
 * 玩家 zhangsan 登录成功！
 * 玩家 zhangsan 在打怪！
 * 玩家 zhangsan 又升了一级！
 * 每升一级计费100元。
 * --------------------------------------------------------------------
 */
